package cn.unknowpupil.init.service.system;

import cn.unknowpupil.init.domain.dto.LoginUser;
import cn.unknowpupil.init.domain.dto.SysUserDto;
import cn.unknowpupil.init.domain.system.SysUser;
import cn.unknowpupil.init.mapper.system.SysUserMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * Created at 2020-11-13 by  w10g <br>
 * Initialize SysUser  ... <br>
 * 用户信息表 核心业务处理接口
 *
 * @author unknowpupil
 * @since 0.0.1
 */
public interface ISysUserService extends IService<SysUser> {
    /**
     * 新增
     *
     * @param sysUser {@link SysUser}  用户信息表
     * @return {@link SysUser}
     */
    boolean create(SysUser sysUser);

    /**
     * 详情
     *
     * @param id {@code Long}   SysUser ID
     * @return {@link SysUser}
     */
    SysUser info(Long id);

    /**
     * 删除
     *
     * @param ids {@code Long}   SysUser ID
     * @return {@link SysUser}
     */
    boolean delete(Long[] ids);


    /**
     * 修改
     *
     * @param sysUser {@link SysUser}  用户信息表
     * @return {@link SysUser}
     */
    boolean update(SysUser sysUser);


    /**
     * 分页
     *
     * @param current {@code int} 页码
     * @param size    {@code int} 笔数
     * @param sysUser {@link SysUser}
     * @return {@code IPage<SysUser>}
     */
    IPage<SysUser> page(int current, int size, SysUser sysUser);

    /**
     * 根据用户名获取 用户
     *
     * @param username
     * @return
     */
    SysUser getUserByUsername(String username);


    /**
     * 重置
     *
     * @param user
     * @return
     */
    boolean changePwd(SysUser user);

    /**
     * 修改人数限制
     * @param user
     * @return
     */
    boolean changeLimit(SysUser user);

    /**
     * 修改状态
     *
     * @param user
     * @return
     */
    boolean changeStatus(SysUser user);






    /**
     * 修改用户基本信息
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean editProfile(SysUser user);

    /**
     *  修改头像
     * @param file
     * @param userId
     * @return
     */
    String updateAvatar(MultipartFile file, Long userId);





    /**
     * 导入用户
     * @param userList
     * @param updateSupport
     * @param loginUser
     * @return
     */
    String importUser(List<SysUserDto> userList, boolean updateSupport, LoginUser loginUser);

    /**
     * 查找用户下面所有的子账户的用户名
     * @param id
     * @return
     */
    List<String> getAllSunUserByUserId(Long id);
    /**
     * 查找用户下面所有的子账户的ID
     * @param id
     * @return
     */
    List<Long> getAllSunIdByUserId(Long id);
}
